﻿namespace Skying
{
	/// <summary>
	/// <see cref="System.Byte"/> 클래스와 <see cref="System.Byte[]"/> 개체에 대한 확장 메서드를 제공한다.
	/// </summary>
	public static class ByteExtensions
	{
		/// <summary>
		/// <para><see cref="System.Byte[]"/> 개체에서 다른 <see cref="System.Byte[]"/> 개체의 위치를 찾아낸다.</para>
		/// <para>이 메서드는 <see cref="System.Byte[]"/>의 확장 메서드를 제공한다.</para>
		/// </summary>
		/// <param name="target">검색 대상 <see cref="System.Byte[]"/> 개체를 설정한다.</param>
		/// <param name="search">대상에서 찾아낼 <see cref="System.Byte[]"/> 개체를 설정한다.</param>
		/// <returns>
		/// <para>대상에서 찾아낼 <see cref="System.Byte[]"/> 개체의 시작 위치가 반환된다.</para>
		/// <para>찾지 못한 경우, -1이 반환된다.</para>
		/// </returns>
		public static int Find(this byte[] target, byte[] search)
		{
			for (int index1 = 0; index1 < target.Length - search.Length; index1++)
			{
				if (target[index1] == search[0])
				{
					int index2;

					for (index2 = 1; index2 < search.Length; index2++)
					{
						if (target[index1 + index2] != search[index2])
						{
							break;
						}
					}

					if (index2 == search.Length) return index1;
				}
			}
			
			return -1;	
		}
	}
}